MySQL(七) 操作表
Table of Contents
创建表
CREATE TABLE customers IF NOT EXISTS( cust_id int NOT NULL AUTO_INCREMENT, cust_name char(50) NOT NULL, cust_address char(50) NULL, cust_city char(50) NULL, cust_state char(5) NULL, cust_zip char(10) NULL, cust_country char(50) NULL, cust_contact char(50) NULL, cust_email char(255) NULL, PRIMARY KEY (cust_id) ) ENGINE=InnoDB;
在表名后面加 IF NOT EXISTS 是怕创建表时覆盖一张相同的表.
NULL 与 NOT NULL
每个列都是 NULL 或者 NOT NULL.
NULL 表示该列的值可以为空, NOT NULL 则表示不为空.
另外, 要注意, NULL 与 '' 是不同的. 给一个字段为 NOT NULL 的列赋值为 '' 是可以的.
主键
主键必须唯一. 如果主键使用单个列, 则它的值必须唯一, 如果使用多个列, 则这些列的组合值必须唯一. 主键的定义语句如下:
PRIMARY KEY(vend_id)
如果是多个语句, 定义语句也基本类似:
PRIMARY KEY(order_num, order_item)
AUTO_INCREMENT
含有 AUTO_INCREMENT 的列, 表示每增加一行数据, 该列的值自动加 1. 这一列的值是唯一的, 适合用来做主键.
一张表只允许一个 AUTO_INCREMENT 列.
如果我们手动为该列赋予了一个值, 则后续的自动加 1 操作, 都在该值的基础上进行.
默认值
使用 DEFAULT 来指定某一列的默认值:
CREATE TABLE orderitems( order_num int NOT NULL, order_item int NOT NULL, quantity int NOT NULL DEFAULT 1, PRIMARY KEY (order_num, order_item) ) ENGINE=InnoDB;
我们更倾向于使用默认值, 而不是 NULL 列.
引擎类型
在创建表, 使用 SELECT 语句, 或者进行其他数据库处理时, 都是引擎在内部处理我们的请求. 不同的引擎具有不同的功能和特性.
需要了解的常用的引擎, 有以下三个:
- InnoDB: 可靠的事务处理引擎, 它不支持全文搜索
- MEMORY: 功能与 MyISAM 相同, 但数据存储在内存而非磁盘, 速度很快, 适用于临时表
- MyISAM: 默认情况下使用这个引擎, 性能极高, 支持全文搜索, 但不支持事务处理
更新表
增加一个列:
ALTER TABLE vendors ADD vend_phone CHAR(20);
删除一个列:
ALTER TABLE vendors DROP COLUMN vend_phone;
更改一个列的属性:
ALTER TABLE vendors CHANGE vend_phone vend_phone CHAR(20) NOT NULL;
更改一个列的名称:
ALTER TABLE vendors CHANGE vend_phone phone CHAR(20) NOT NULL;
定义外键:
ALTER TABLE orderitems ADD CONSTRAINT fk_orderitems_orders FOREIGN KEY (order_num) REFERENCES orders (order_num);
fk_orderitems_orders 是为外键约束命名.
外键约束可以用于预防破坏表之间连接的动作, 也能防止非法数据插入外键列, 因为它必须是指向的另一个表中的值之一.
删除表
DROP TABLE table_name;
表重命名
RENAME TABLE old_name TO new_name;
Generated by Emacs 25.x(Org mode 8.x)
Copyright © 2014 - Pinvon - Powered by EGO